您的位置:首页 > 编程语言 > Java开发

【java设计模式】工厂方法模式

2020-06-20 14:58 225 查看

钉钉、微博极速扩容黑科技,点击观看阿里云弹性计算年度发布会!>>>

转载自:https://www.geek-share.com/detail/2570685321.html

java工厂方法模式

意图:定义一个用于创建对象的接口,让子类决定创建那个类。Factory Method使一个类的实例化延迟到其子类中
动机:框架使用抽象类定义和维护对象之间的关系。这些对象的创建通常也由框架负责
适用性:
1.当一个类不知道它所必须创建的对象的类的时候
2.当一个类希望由它的子类来指定它所创建的对象的时候
3.当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将那一个帮助子类是代理者这一信息局部化的时候
结构:





工厂方法的实现主要有两种情况:

1.Creator类是一个抽象类并且不提供它所声明的工厂方法的实现

2.Creator是一个具体的类而且为工厂方法提供一个缺省的实现

实例:

 1 package com.test.patten.factory; 2  3 public abstract class Creator { 4     public abstract Product productFactory(String type); 5      6     public void doSomething(String type) { 7         Product product = productFactory(type); 8         product.getPrice(); 9     }10 }

1 package com.test.patten.factory;2 3 public abstract class Product {4     double price = 0;5     public void getPrice() {6         System.out.println("我的价格是:"+price);7     }8 }

1 package com.test.patten.factory;2 3 public class GoodProduct extends Product {4 5     public GoodProduct() {6         super();7         this.price = 100.0;8     }9 }

1 package com.test.patten.factory;2 3 public class BadProduct extends Product {4 5     public BadProduct() {6         super();7         this.price = 0.01;8     }9 }

 1 package com.test.patten.factory; 2  3 public class ConcreteCreator extends Creator { 4  5     @Override 6     public Product productFactory(String type) { 7         Product product = null; 8         if(type.equals("good")){ 9             product = new GoodProduct();10         }else if (type.equals("bad")) {11             product = new BadProduct();12         }13         return product;14     }15 16 }

测试一下:

1 package com.test.patten.factory;2 3 public class Client {4     public static void main(String args[]){5         Creator creator = new ConcreteCreator();6         creator.doSomething("good");//生产一个好的产品7         creator.doSomething("bad");//生产一个次品8     }9 }

我的价格是:100.0我的价格是:0.01

应用:工厂方法主要应用于工具包和框架中
设计原则:要依赖抽象,不要依赖具体类-依赖倒置原则


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 设计模式