设计模式——工厂方法模式
来源:互联网 发布:盟拓软件 编辑:程序博客网 时间:2024/06/06 06:52
工厂方法模式,类创造模式的一种,一种实例化对象(生产产品)的方法,用来从一组实现特定逻辑的类中实现某个对象。
先定义一个用于实现基本功能的超类或者接口,并以此拓展出一组具体的产品类(要实例化的类)。之后创建一个产生产品的工厂类,这个类包含一个工厂方法 ,这个方法根据接受的参数类型个数决定要实现的是哪个子类。该方法使用超类的类型作为返回类型。
那么什么时候才用工厂模式呢,或者说怎么用?
什么时候:
当需要创建一个类,而在编程时还不能确定这个类的类型时;
当一个类希望通过其子类来指定所创建对象的类型时;
当我们想要定位被创建的类,并获取相关的信息时。
怎么用:
创建一个基本的接口;
子类(产品类)继承接口,实现对应的基本功能方法;
创建一个工厂类,类中创建一个工厂方法,该方法可以根据参数决定要实例化的是哪个产品类;
创建一个Demo类,实例化具体的产品类
一个简单的例子:
先创建一个接口:
/** * 定义一个简单的接口,里面包括一个简单的方法 * @author luzi * */public interface Pet {public String petSound();}
两个不同的子类:
/** * 继承Pet接口,实现接口的方法 * @author luzi * */public class Cat implements Pet {@Overridepublic String petSound() {// TODO Auto-generated method stubSystem.out.println("miao...");return "miao...miao";}}
/** * 继承Pet接口,实现接口的方法 * @author luzi * */public class Dog implements Pet {@Overridepublic String petSound() {// TODO Auto-generated method stubSystem.out.println("Bow..");return "Bow...Bow";}}
工厂类:
/** * 创建一个工厂类,实现对象创建的逻辑:根据参数决定要创建的对象 * @author luzi * */public class PetFactory {Pet pet = null;public Pet getPet(String petType){if(petType.equals("Bow"))pet = new Dog();elseif(petType.equals("miao"))pet = new Cat();return pet;}}
简单的具体实现:
/** * 简单的Demo * @author luzi * */public class PetDemo {public static void main(String args[]){PetFactory fac = new PetFactory();//实例化一个工厂类Pet cat = fac.getPet("miao");//调用工厂类的getPet 方法,根据参数动态生成对象Pet dog = fac.getPet("Bow");cat.petSound();dog.petSound();}}
输出:
阅读全文
0 0
- 设计模式—工厂方法
- 设计模式—工厂方法
- 设计模式——抽象工厂模式、工厂方法模式
- Java设计模式—工厂方法模式&抽象工厂模式
- Java设计模式—工厂方法模式&抽象工厂模式
- 设计模式——工厂方法模式
- 设计模式——工厂方法模式
- 设计模式——工厂方法模式
- 设计模式——工厂方法模式
- 设计模式——工厂方法模式
- 设计模式——工厂方法模式
- 设计模式——工厂方法模式
- 设计模式——工厂方法模式
- 设计模式——工厂方法模式
- 设计模式——工厂方法模式
- 设计模式——工厂方法模式
- 设计模式——工厂方法模式
- 设计模式——工厂方法模式
- Linux服务(DNS)
- 【SpringCloud】(十四):Feign对Hystrix的支持 fallbackFactory
- window10安装nodejs出现2503,2502错误的解决方法
- 【二分图匹配入门专题1】A
- Mysql联表查询、查询近期某段时间内的数据等
- 设计模式——工厂方法模式
- 单向循环链表
- Java中Vector和ArrayList的区别
- HDU 1087
- android境外支付
- Java基础总结
- hpuoj【1391】矩阵A+B【数组】&&【水题】
- 这么多中小企业就被人遗忘了吗?
- build opencv hdf module 配置hdf5路径