网上列子,创造三种不同的人

静态工程模式:

public interface Human { public void getColor();//人有不同的颜色    public void talk(); //人会说话
}

Human接口的不同实现:

public class BlackHuman implements Human {// 黑种人@Overridepublic void getColor() {System.out.println("Black");}@Overridepublic void talk() {System.out.println("Black man");}
}
public class Human implements Human {   //黄种人@Overridepublic void getColor() {System.out.println("Yellow");}@Overridepublic void talk() {System.out.println("Yellow man");}
}
public class WhiteHuman implements Human {//白种人@Overridepublic void getColor() {System.out.println("White");}@Overridepublic void talk() {System.out.println("White man");}
}

模型:必须传入Human的实现类

public abstract class AbstractHumanFactory{public abstract <T extends Human> T createHuman(Class<T> clazz); //注意这里T必须是Human的实现类才行,因为要造Human嘛
}

实现具体模型:

public class HumanFactory extends AbstractHumanFactory {@Overridepublic <T extends Human> T createHuman(Class<T> clazz) {Human human = null;try {human = (Human) Class.forName(clazz.getName()).newInstance();} catch (Exception e) { //异常处理System.out.println("人种产生错误");}return (T) human;}
}

工厂具体的生产:

public class FactoryTest {public static void main(String[] args) {AbstractHumanFactory bagualu = new HunmanFactory();Human blackMan = bagualu.createHuman(BlackHuman.class); //黑人诞生了Human yellowMan = bagualu.createHuman(YelloHuman.class); //黄人诞生了Human whiteMan = bagualu.createHuman(WhiteHuman.class); //白人诞生了}
}

抽象工厂模式的实现:

不同的厂商分别生产各自的手机:

//其中的method()方法可看作提取出不同产品的共性,如手机都有类似的功能
interface IProductA {public void method();
}

厂商1:

// 由于已经设计好A1由厂商1生产,故以下输出代码有“厂商x”
class ProductA1 implements IProductA {public void method() {System.out.println("厂商1    生产ProductA1 ...");}
}

厂商2:

class ProductA2 implements IProductA {public void method() {System.out.println("厂商2    生产ProductA2 ...");}
}

// 每一种牌子的产品生产工厂,即不同的厂商负责自己牌子产品的生产:

abstract class Factory1 {abstract IProductA getProductA1();}
abstract class Factory2 {abstract IProductA getProductA2();}

// 具体的工厂用来生产相关的产品

class ConcreteFactory1 extends Factory1 {public IProductA getProductA1() {return new ProductA1();}}

class ConcreteFactoryB extends Factory2 {public IProductA getProductA2() {return new ProductA2();}}
// 测试类
public class Client {public static void main(String[] args) {// 厂商1负责生产产品A1Factory1 factory1 = new ConcreteFactory1();IProductA productA1 = factory1.getProductA1();productA1.method();// 厂商2负责生产产品A2Factory2 factory2 = new ConcreteFactoryB();IProductA productA2 = factory2.getProductA2();productA2.method();}
}

java工厂模式学习相关推荐

  1. Java 工厂模式学习

    工厂模式分三种:简单工厂.工厂方法.抽象工厂.其中抽象工厂是用于多个产品族的情况.所谓产品族就是不同产品组成的有机整体,各不同产品之间相互依赖.打个比方,一台电脑有CPU.主板.内存和硬盘等,这些不同 ...

  2. java设计模式中不属于创建型模式_23种设计模式第二篇:java工厂模式定义:工厂模式是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式...

    23种设计模式第二篇:java工厂模式 定义: 工厂模式是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 工厂模式主要是为创建对象提供过渡接口, ...

  3. 3种Java工厂模式深入理解分析

    Java工厂模式的概念 工厂模式适用于创建新对象最简单的办法是使用new关键字和具体类.工厂模式主要是为创建对象提供了接口.一般当在编码时不能预见需要创建哪种类的实例或者系统不应依赖于产品类实例如何被 ...

  4. java 工厂模式详解_java 工厂模式的实例详解

    java 工厂模式的实例详解 工厂方法中的"工厂"和我们平常理解的一样:用于生产产品. 而客户是要和产品打交道,所以工厂方法模式的意义在于把客户和产品分开,达到解耦和更灵活的目的. ...

  5. java工厂模式和抽象工厂_Java中的抽象工厂设计模式

    java工厂模式和抽象工厂 Welcome to Abstract Factory Design Pattern in java example. Abstract Factory design pa ...

  6. java工厂模式实例(设计模式)

    目录 java工厂模式 工厂模式其实又分为三种 1.简单工厂模式: 简单工厂模式(非静态) 简单工厂模式(静态): 2.工厂方法模式: 3.抽象工厂模式: java工厂模式 开篇声明,此理解为作者自身 ...

  7. JAVA -- 工厂模式之 抽象工厂模式

    定义: 在spring和其他的框架中,工厂模式被大量使用,实际上工厂模式就是帮助我们实例化对象的设计模式,因为在实际的项目中,实例化对象的同时,可能对象中有大量的初始化工作,如果每次项目有个地方用到这 ...

  8. java工厂模式的优势,java 工厂模式的讲解及优缺点的介绍

    简单工厂模式介绍: 概要: 简单工厂模式,又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式.在简单工厂模式中,把产品的生产方法封装起来放进工厂类,工厂类可以根据 ...

  9. Java工厂模式(随笔)

    目录 前言 一.三大工厂模式以及特殊工厂模式介绍 1.简单工厂模式简介(Simple Factory Pattern) 2.工厂模式简介   (Factory Pattern) 3.抽象工厂模式简介 ...

最新文章

  1. (转自PHPer)成长的选择
  2. java process started_Java HistoricProcessInstanceQuery.startedBy方法代碼示例
  3. 移动端实现PDF文件阅读的方法
  4. Linux的文本字段统计方法
  5. 剑指Offer(Java实现)栈的压入、弹出序列
  6. jquery 入门与知识
  7. 用置换破坏您的JUnit5测试
  8. docker mysql:8.0.27
  9. php 将字符串打乱,PHP内部实现打乱字符串顺序函数str_shuffle的方法
  10. 用c语言随机获区100个整数,用rand() 函数去100 个随机的整数的有关问题
  11. 使用setCustomView建立标题居中的自定义ActionBar
  12. python怎么读-Python中怎么读写文件
  13. opengl es3.0游戏开发学习笔记2--绘制地月星系
  14. 通过minicom传送文件的相关配置及使用方法
  15. 海信电视怎么删除自带应用
  16. 计算机二进制教案教程,计算机的二进制教案.doc
  17. js 根据公历日期 算出农历_显示阴历(农历)日期的js代码
  18. HANA数据库备份脚本案例(刘欣)
  19. 蓝桥杯java技巧总结
  20. Deep Crossing: Web-Scale Modeling without Manually Crafted Combinatorial Features【论文记录】

热门文章

  1. 用mac的chrome浏览器调试Android手机的网页
  2. MasterPage控件的用法
  3. 一个boost底下的线程池
  4. 1.Python基础----认识环境
  5. 计算机联锁道岔故障处理,TYJL-II型计算机联锁系统的日常维护和故障处理.doc
  6. linux diff 远程文件,登录diff命令,以单独的文件输出在linux
  7. mysql 避免重复添加_MySql三种避免重复插入数据的方法
  8. 现在的计算机电源都要经过,电脑待机后必须关闭电源才能开启
  9. linux复制内容的快捷键,Linux复制粘贴快捷键
  10. 立体剪纸风新春农历春节PSD分层海报素材