Java设计模式--工厂模式
来源:互联网 发布:面向对象java试题 编辑:程序博客网 时间:2024/06/17 19:44
简单工厂方法模式(别名:虚拟构造)
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。
Simple Factory Pattern(Another Name: Virtual Constructor)
Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses.
类图
模式的结构与使用
工厂方法模式的结构中包括四个角色。
+ 抽象产品(Product):抽象类或接口,负责定义具体产品必须实现的方法。
+ 具体产品(Concrete Product):具体产品是一个类,如果Product是一个抽象类,那么具体产品是Product的子类;如果Product是一个接口,那么具体产品去实现接口。
+ 构造者(Creator):一个接口或者抽象类。构造者负责定义一个称作工厂方法的抽象方法,该方法返回具体产品类的实例。
+ 具体构造者(Concrete Creator):具体构造者重写工厂方法使该方法返回具体产品的实例。
简单的例子
Product的抽象类Animals.java
package virtualconstructor;public abstract class Animals { String name; public abstract void move();}
ConcreteProduct的实现类Dog.java
package virtualconstructor;public class Dog extends Animals{ public Dog() { name = "狗"; } public void move () { System.out.println(name + "是走"); }}
ConcreteProduct的实现类Cat.java
package virtualconstructor;public class Cat extends Animals { public Cat() { name = "猫"; } @Override public void move() { System.out.println(name + "是飞"); }}
Creator的抽象类Creator.java
package virtualconstructor;public abstract class Creator { Animals animal; public abstract Animals getAnimal();}
ConcreteCreator的实现类DogCreator.java
package virtualconstructor;public class DogCreator extends Creator { @Override public Animals getAnimal() { return new Dog(); }}
ConcreteCreator的实现类CatCreator.java
package virtualconstructor;public class CatCreator extends Creator { @Override public Animals getAnimal() { return new Cat(); }}
测试类Application.java
package virtualconstructor;public class Application { public static void main(String[] args) { DogCreator dog = new DogCreator(); dog.getAnimal().move(); CatCreator cat = new CatCreator(); cat.getAnimal().move(); }}
工厂模式的优点
- 使用工厂模式可以让用户的代码和某个特定类的子类的代码解耦。
- 工厂方法的使用用户不必知道它所使用的对象是怎么被创建的,只需要知道该对象有哪些方法即可。
适用工厂模式的情景
- 用户需要一个类的子类的实例,但不希望与该类的子类形成耦合。
- 用户需要一个类的子类的实例,但用户不知道该类有哪些子类可用。
下载源码请到
MyGitHub
0 0
- java设计模式----工厂模式
- java 设计模式-工厂模式
- java设计模式-工厂模式
- java设计模式------工厂模式
- JAVA设计模式-工厂模式
- Java 设计模式 工厂模式
- Java设计模式-工厂模式
- Java设计模式--工厂模式
- Java设计模式 - 工厂模式
- java设计模式--工厂模式
- Java设计模式:工厂模式
- Java设计模式--工厂模式
- java设计模式-------工厂模式
- java设计模式------工厂模式
- JAVA设计模式:工厂模式
- java设计模式:工厂模式
- java设计模式 ----工厂模式
- Java设计模式--工厂模式
- 异步加载图片(二)
- test code
- 记下线程中sleep()与wait()的区别
- android 视频截图笔记
- java源码学习5-ClassLoader
- Java设计模式--工厂模式
- iOS中常见 Crash 及解决方案
- 初步理解BFC
- Android Button实现方式
- C语言(2)------标识符和关键字
- java中常见的异常1——静态对象调用非静态对象
- 2016Qingdao网络预选赛1007 / HDU5884 Sort(二分)
- 欢迎使用CSDN-markdown编辑器
- Machine Learning week 5 programming exercise Neural Network Learning