设计模式之 工厂模式(Factory)
2017-02-07 09:48
260 查看
1.工厂模式的作用
工厂模式封装了对象创建的过程,低程序模块之间的耦合度。
2.工厂模式一般有哪几种
1.普通工厂 2.工厂方法 3.抽象工厂
3.示例代码:
1.所需要的接口和实现类 public interface Animal{ //定义一个接口,之后需要的实体类都将实现该接口 public abstract void eat(); } public class Person implements Animal{ public void eat(){ System.out.println("我是佩森"); } } public class Dog implements Animal{ public void eat(){ System.out.println("我是道格"); } } public class Cat implements Animal{ public void eat(){ System.out.println("我是凯特"); } } 2.普通工厂类 public class AnimalFactory{ //动物工厂类 public Animal getAnimal(String typeName) throws Exception{ if("Person".equals(typeName)) return new Person(); else if("Dog".equals(typeName)) return new Dog(); else if("Cat".equals(typeName)) return new Cat(); else throw new Exception("TypeName error"); } } //调用: public void test(){ AnimalFactory af = new AnimalFactory(); try { Dog dog = (Dog) af.getAnimal("Dog"); dog.eat(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } //输出:我是道格 //以上代码可以把getAnimal()设置为静态方法,方便调用 //上面的代码是普通工厂模式,但是有个缺点,假如这个工厂能创建100个不同的实体类,那么逻辑控制就显得十分繁杂,下面的代码是反射版本的,解决了以上问题 public Animal getAnimal(String className) throws Exception { return (Animal) Class.forName(className).newInstance(); } //注意:调用的时候className为该类的全限定名 2.工厂方法 public Animal AnimalFactroyMethod{ public Animal getDog(){ return new Dog(); } public Animal getCat(){ return new Cat(); } public Animal getPerson(){ return new Person(); } } //调用方式就是调用类中的方法获得相应实体类对象,这样避免了由于传入参数的错误导致报错 //但是问题又来了,假如我有开始有1个,然而后来我又需要一个方法来提供对象,这样我们只能修改原来的类,这样就违背了开闭原则 3.抽象工厂方法 //为了解决以上问题,我们可以将工厂类抽象出来,每当需要新的类型时候,就创建一个实现该接口的工厂类,代码如下: //抽象工厂 public interface PublicFactory{ public Animal produce(); } //Dog类的工厂 public class DogFactory implements PublicFactory{ public Animal produce(){ return new Dog(); } } //其他动物都是这样的,现在我们要添加一个新动物 public class Snake implements Animal{ public void eat(){ System.out.println("蛇吃东西"); } } //蛇的工厂类 public class SnakeFactory implements PublicFactory{ public Animal produce(){ return new Snake(); } }
相关文章推荐
- 设计模式(一)工厂模式Factory
- 设计模式(1)の创建型の工厂方法模式(Factory Method)の(普通|简单)工厂模式
- 结合Android学设计模式--工厂方法(FactoryMethod)
- 设计模式之——工厂方法(factory)
- Java设计模式二:抽象工厂模式(Abstract Factory)/工厂方法(Factory Method)
- 设计模式学习笔记——工厂(Factory)模式
- 设计模式笔记-创建型模式之三--工厂方法:Factory Method
- 设计模式之工厂模式Factory
- 设计模式之工厂模式 Factory
- 设计模式(八)[工厂方法(Factory Method)模式]
- 我的设计模式-工厂(Factory Method)
- 设计模式学习笔记三:简单工厂(Simple Factory)
- 设计模式之Factory工厂模式
- 设计模式(一)----- 工厂方法(FactoryMethod)----(JAVA版)
- Java设计模式——工厂方法(Factory Method)
- 设计模式学习笔记——简单工厂(Simple Factory)
- 【设计模式】——工厂方法FactoryMethod
- 学习php设计模式 php实现工厂模式(factory)
- .NET实用设计模式:工厂模式(Factory)
- [设计模式-创建型]工厂方法(Factory Method)