码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-12-26 00:50:01      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:[]   示例   public   tor   void   post   size   png   多个   

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).系统设计本身就由子类去指定实现类

 

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

标签:[]   示例   public   tor   void   post   size   png   多个   

原文地址:https://www.cnblogs.com/wuyanlin/p/8111602.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!