java设计模式之工厂方法设计模式

1.定义

定义一个用于创建对象的接口,让子类决定实例化哪一个类,FactoryMethod使一个类的实例化延迟到其子类.

2.意识图

 

3.代码示例

联想工厂创建联想的电脑,戴尔创建戴尔的电脑

1)电脑接口

/**
 * 电脑接口
 * wuyanlin2016@163.com
 *  2017年12月25日
 */
public interface Computer {
    /**
     * 描述-->一句话简介
     * @param description  描述语
     */
    public void describe(String description);
}

 

2).戴尔电脑

/**
 * Dell电脑
 * wuyanlin2016@163.com
 *  2017年12月25日
 */
public class DellComputer implements Computer {

    @Override
    public void describe(String description) {
        System.out.println(description);
    }
    
}

 

3).联想电脑

/**
 * Lenovo电脑
 * wuyanlin2016@163.com
 *  2017年12月25日
 */
public class LenovoComputer implements Computer {

    @Override
    public void describe(String description) {
        System.out.println(description);
    }
    
}

 

4).电脑工厂

/**
 * 电脑工厂
 * wuyanlin2016@163.com
 *  2017年12月25日
 */
public class ComputerFactory {
    public static Computer buildComputer(String pcName) {
        if("dell".equalsIgnoreCase(pcName)) return new DellComputer();
        if("lenovo".equalsIgnoreCase(pcName)) return new LenovoComputer();
        return null;
    }
}

 

5).电脑操作类

/**
 * 电脑操作类,调用工厂创建电脑
 * wuyanlin2016@163.com
 *  2017年12月25日
 */
public class ComputerOperator {
    
    /**
     * 创建电脑
     * @param pcName  电脑名字
     * @param  description  电脑描述
     */
    public void createComputer(String pcName,String description) {
        ComputerFactory.buildComputer(pcName).describe(description);
    }
}

 

6).客户端类

/**
 * 客户端
 * wuyanlin2016@163.com
 *  2017年12月25日
 */
public class Client {
    public static void main(String[] args) {
        ComputerOperator computerOperation = new ComputerOperator();
        computerOperation.createComputer("lenovo", "我是联想");
        computerOperation.createComputer("dell", "我是戴尔");
    }
}

 

 

7).结果

我是联想
我是戴尔

 

 

4.总结

何时选用?

1).一个接口多个实现,但是又不知道具体用哪一个实现,由子类去指定

2).系统设计本身就由子类去指定实现类

 

posted @ 2017-12-25 22:45  vlime  阅读(145)  评论(0编辑  收藏  举报