JAVA设计模式学习之----创建模式:工厂模式(抽象工厂)
来源:互联网 发布:平价眼影推荐 知乎 编辑:程序博客网 时间:2024/05/16 18:26
前面学习了工厂方法,那么现在假如有多个Person接口,如Person,Person2,实现两个接口的类分别为Zhangshan,Zhansi;Wangwu,Wangliu;那么这个时候工厂类应该怎么设计呢?
当然可以分别设计两个工厂类来实现,不过因为他们有一定的关联性,所以我们应该将原来的工厂类抽象成抽象工厂,然后分别对这个类有两个实现类,在这两个实现的工厂类里面就可以分别产生出两组对象了。如下:
Person类:
- package com.foactory.eus.interfaces;
- public interface Person {
- public static final String className = "Person";
- String getName();
- int getAge();
- }
Person2类:
- package com.foactory.eus.interfaces;
- public interface Person2 {
- public static final String className = "Person2";
- String getName();
- int getAge();
- }
他们的实现类分别为:
Zhangshan类:
- package com.foactory.eus.implement;
- import com.foactory.eus.interfaces.Person;
- public class Zhangshan implements Person{
- public String getName() {
- System.out.println("this is zhangshan is name");
- return "";
- }
- public int getAge() {
- return 0;
- }
- }
Zhangsi类:
- package com.foactory.eus.implement;
- import com.foactory.eus.interfaces.Person;
- public class Zhangsi implements Person {
- public int getAge() {
- return 0;
- }
- public String getName() {
- System.out.println("this is zhangsi is name");
- return null;
- }
- }
Wangwu类:
- package com.foactory.eus.implement;
- import com.foactory.eus.interfaces.Person2;
- public class Wangwu implements Person2{
- public String getName() {
- System.out.println("this is Wangwu is name");
- return "";
- }
- public int getAge() {
- return 0;
- }
- }
Wangliu类:
- package com.foactory.eus.implement;
- import com.foactory.eus.interfaces.Person2;
- public class Wangliu implements Person2{
- public String getName() {
- System.out.println("this is Wangliu is name");
- return "";
- }
- public int getAge() {
- return 0;
- }
- }
工厂类:
PersonFactory:
- package com.foactory.eus.factory;
- import com.foactory.eus.interfaces.Person;
- import com.foactory.eus.interfaces.Person2;
- public abstract class PersonFactory {
- public abstract Person instance();
- public abstract Person2 instance1();
- }
实现工厂类:
Person1Factory:
- package com.foactory.eus.factory;
- import com.foactory.eus.implement.Wangwu;
- import com.foactory.eus.implement.Zhangshan;
- import com.foactory.eus.interfaces.Person;
- import com.foactory.eus.interfaces.Person2;
- public class Person1Factory extends PersonFactory{
- public Person instance() {
- return new Zhangshan();
- }
- public Person2 instance1() {
- return new Wangwu();
- }
- }
Person2Factory:
- package com.foactory.eus.factory;
- import com.foactory.eus.implement.Wangliu;
- import com.foactory.eus.implement.Zhangsi;
- import com.foactory.eus.interfaces.Person;
- import com.foactory.eus.interfaces.Person2;
- public class Person2Factory extends PersonFactory{
- public Person instance() {
- return new Zhangsi();
- }
- public Person2 instance1() {
- return new Wangliu();
- }
- }
现在针对上面的工厂设计一测试类:
- import com.foactory.eus.factory.Person1Factory;
- import com.foactory.eus.factory.Person2Factory;
- import com.foactory.eus.interfaces.Person;
- import com.foactory.eus.interfaces.Person2;
- public class Test {
- public static void main(String[] args){
- Person1Factory pf1 = new Person1Factory();
- Person p1 = pf1.instance();
- Person2 p2 = pf1.instance1();
- p1.getName();
- p2.getName();
- Person2Factory pf2 = new Person2Factory();
- Person p3 = pf2.instance();
- Person2 p4 = pf2.instance1();
- p3.getName();
- p4.getName();
- }
- }
结果为:
- this is zhangshan is name
- this is Wangwu is name
- this is zhangsi is name
- this is Wangliu is name
- JAVA设计模式学习之----创建模式:工厂模式(抽象工厂)
- JAVA设计模式学习之----创建模式:工厂模式(工厂方法)
- 设计模式-抽象工厂
- 设计模式笔记-抽象工厂模式
- 设计模式笔记-抽象工厂模式
- 设计模式笔记-抽象工厂模式
- 设计模式-抽象工厂模式
- 设计模式-抽象工厂模式(AbstractFactoryPattern)
- java设计模式(创建型)之抽象工厂模式
- java 设计模式-创建模式之抽象工厂模式
- java设计模式 -------- 创建模式 之 抽象工厂模式
- java设计模式之创建型模式-抽象工厂模式
- 工厂模式三部曲-抽象工厂模式
- java学习之工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)
- 设计模式学习之创建模式之抽象工厂(二)
- JAVA设计模式之工厂模式之抽象工厂模式
- Android设计模式(十二)--抽象工厂模式
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- 将后台窗口激活到前台的方法
- 2007全国大学生电子设计竞赛设计报告要求
- 著名的SQL流量注入(SQL注入)攻击法
- 史玉柱10大广告法则
- 注册表修改( RegCreateKeyEx , RegSetValueEx )
- JAVA设计模式学习之----创建模式:工厂模式(抽象工厂)
- hpux (console is on a serial device,no further output will appear on this output device)
- Struts 1.3.10 上传文件时发生问题。1.3.8,1.2.9没有类似问题
- HP-EVA4400安装
- BST二叉搜索树的实现
- “逆市新宠”母婴网站有望提前盈利
- 创业公司的“四不五缺”!
- [strlen的GNU实现]有趣的代码
- dataGridView右键菜单并选中该行