Java基础——工厂模式
通过学习,一句话概括Java工厂模式的特点——通过建立一个工厂来创建对象,不必关心构造对象实例能不能被实例化啊等诸多细节和复杂过程。
工厂模式呢?就像我们从劳动密集型社会转型到技术密集型社会。打个比方,从前要制造一个桌子,从上山选木头、砍木头、运木头,到设计桌子,制造桌子等细节问题都需要一个人去做好,由于付出的劳动成本极高和技术学成的时间等问题,一般一个木匠在创新方面有一定的局限性。后来,人们步入了工业时代,制造业的发展突飞猛进,另外,倡导分工细化。比如,电脑的制造厂商,它懂得怎样装好一部电脑和谁的零部件做的好,这个电脑厂商不必知道每个零部件的制作细节,但是,一样可以制造出来性能优越(算是一种取最优吧)的电脑。
一、工厂模式
工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。
二、工厂模式分为三类
1.简单工厂模式(Simple Factory)
2.工厂方法模式(Factory Method)
3.抽象工厂模式(Abstract Factory)
这三种模式从上到下逐步抽象,并且更具一般性。
工厂方法模式:
一个抽象产品类,可以派生出多个具体产品类; 一个抽象工厂类,可以派生出多个具体工厂类;每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂模式:
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类;一个抽象工厂类,可以派生出多个具体工厂类;每个具体工厂类可以创建多个具体产品类的实例。
三、简单工厂模式
建立一个工厂(一个函数或一个类方法)来制造新的对象。
代码实例:
public class Dog {
private String name;
private String address;
void shout() {
System.out.println("汪汪汪~~");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
class DogFactory {
static public Dog getDog() {
// return new Dog();
Dog dog = new Dog();
dog.setAddress("浙江杭州");
dog.setName("M.zhou");
return dog;
}
}
class Test2 {
public static void main(String[] args) {
Dog dog = DogFactory.getDog();
Dog dog2 = DogFactory.getDog();
Dog dog3 = DogFactory.getDog();
System.out.println(dog == dog2); // false
}
}
四、工厂方法模式
工厂方法模式去掉了简单工厂模式中工厂方法的静态属性,使得它可以被子类继承。这样在简单工厂模式里集中在工厂方法上的压力可以由工厂方法模式里不同的工厂子类来分担。
工厂方法模式组成:
1.抽象工厂角色:
工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。
2.具体工厂角色:
它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。
3.抽象产品角色:
它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。
4.具体产品角色:
具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。
工厂方法模式使用继承自抽象工厂角色的多个子类来代替简单工厂模式中的“上帝类”。这样便分担了对象承受的压力;而且这样使得结构变得灵活 起来,前面学习过面向对象的三大特性,继承、封装和多态,工厂模式是将这三大特性集合起来的应用,同时工厂角色的结构也是符合开闭原则的。
下面举个例子:
/*
* @author M.zhou
* @date 2017-7-1 下午 18:59
* version 1.0
*
*/ //创建电脑制造工厂
public interface MyFactory {
public MyBattery createBattery(); // 定义创建电池 public MyDisplay createDisplay(); // 定义创建显示器 public MyMotherBoard createMotherBorad(); // 定义创建主板 public MyShell createShell(); // 定义创建外壳
}
//创建电脑原材料工厂,负责提供电池、显示屏、主板和外壳
public class ComFactory implements MyFactory { @Override
public <MyBattery> MyBattery createBattery() {
// TODO Auto-generated method stub
return new SuperBattery;
} @Override
public MyDisplay createDisplay() {
// TODO Auto-generated method stub
return new SuperDisplay;
} @Override
public MyMotherBoard createMotherBorad() {
// TODO Auto-generated method stub
return new SuperMotherBoard;
} @Override
public MyShell createShell() {
// TODO Auto-generated method stub
return new SuperShell;
}
}
//創建电脑装配厂的接口,只负责从原材料那里获取材料并配置成新型电脑。其他的它一概不管
public interface ComAssemblyPlant {
public Computer Assembley(); }
//新型电脑装配厂(可以根据市场需求,更换、升级零件,制造新型电脑)
public class NewComputerFactory implements ComAssemblyPlant {
MyFactory materialFactory; // 原料工厂 @Override public Computer Assembley() {
Computer computer=new Computer(); computer.setBattery(materialFactory.createBattery());
computer.setDisplay(materialFactory.createDisplay());
computer.setMotherBoard(materialFactory.createMotherBorad());
computer.setShell(materialFactory.createShell());
return computer; } }
Java基础——工厂模式的更多相关文章
- JAVA基础--工厂模式
interface Fruit{ // 定义一个水果接口 public void eat() ; // 吃水果 } class Apple implements Fruit{ public void ...
- !!转!!java 简单工厂模式
举两个例子以快速明白Java中的简单工厂模式: 女娲抟土造人话说:“天地开辟,未有人民,女娲抟土为人.”女娲需要用土造出一个个的人,但在女娲造出人之前,人的概念只存在于女娲的思想里面.女娲造人,这就是 ...
- 一张图搞定Java设计模式——工厂模式! 就问你要不要学!
小编今天分享的内容是Java设计模式之工厂模式. 收藏之前,务必点个赞,这对小编能否在头条继续给大家分享Java的知识很重要,谢谢!文末有投票,你想了解Java的哪一部分内容,请反馈给我. 获取学习资 ...
- Java抽象工厂模式
Java抽象工厂模式 基本定义 抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的.抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象 ...
- Java的工厂模式(一)
Java的工厂模式在框架中是用的到很多的,所谓的工厂模式,其实也就是用一个接口来创建对象,把实例化的工作推迟到子类去实现.这样在主函数中就可以直接创建一个工厂类,再通过这个工厂类实现操作. 假设有一个 ...
- Java简单工厂模式
Java简单工厂模式 在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简 ...
- Java 静态工厂模式的使用
多相关文章请参考:http://www.enjoytoday.cn/categorys/java 静态工厂模式给人的第一印象就是:static+abstract.这两个词汇已经说明了一切,一个是周期长 ...
- 【设计模式】Java设计模式 -工厂模式
[设计模式]Java设计模式 -工厂模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! 目 ...
- 从基础知识到重写Spring的Bean工厂中学习java的工厂模式
1.静态工厂模式其他对象不能直接通过new得到某个类,而是通过调用getInstance()方法得到该类的对象这样,就可以控制类的产生过程.顺带提一下单例模式和多例模式: 单例模式是指控制其他对象获 ...
随机推荐
- 防止活动上线时 微信openid 被伪造的解决办法
背景 前不久上线了一个 campaign 项目,一个 h5,后端为php,用户可以在微信中通过网页授权的方式登录,然后用微信 openid 作为唯一标识符进行签到和抽奖的操作. 结果后期出现了很多脏数 ...
- VBA操作word生成sql语句
项目开始一般都是用word保存下数据库的文档 但是从表单一个一个的建表实在是很困难乏味,查查资料 1.可以生成一个html或者xml,检索结构生成sql.但是这个方式也蛮麻烦 2.查到vba可以操作w ...
- Spring中ioc的实现原理
学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...
- JS脚本实现CSDN免登陆免关闭广告插件自动展开“阅读更多”内容
最近在CSDN查资料,总是弹出以下弹窗,然后就自动跳转到登录页面,蛋疼! 于是重新捣腾了一下,修改了原来的脚本,最新的脚本代码如下: 温馨提示:在打开CSDN页面后立刻执行以下脚本即可免登陆免关闭广告 ...
- Java DB访问(一) JDBC
项目说明 项目采用 maven 组织 ,jdbc 唯一的依赖就是 mysql-connector-java pom 依赖如下: <dependency> <groupId>my ...
- eclipse下搭建shell脚本编辑器--安装开发shell的eclipse插件shelled
具体请看: 亲测有效: http://www.cnblogs.com/shellshell/p/6122811.html
- vue中请求本地的json数据
为什么要请求本地的数据?模拟后台的请求数据,验证页面的逻辑是否存在问题,抛开后台提前开发等. 常用的说来有:jq的方式 约等于 axios的方式,vuex状态管理的方式 个人认为最好用的就是jq的方式 ...
- 用SpringSecurity从零搭建pc项目-01
注:之前写过一些列的SpringSecurity的文章,重新写一遍是为了把某些不必要的步骤省去,留下精简的,因为工作中有一些不需要. 在java的权限框架里,shiro和SpringSecurity是 ...
- 数据库设计 Step by Step (2)——数据库生命周期
引言:数据库设计 Step by Step (1)得到这么多朋友的关注着实出乎了我的意外.这也坚定了我把这一系列的博文写好的决心.近来工作上的事务比较繁重,加之我期望这个系列的文章能尽可能的系统.完整 ...
- mpvue小程序图片404
mpvue开发小程序时候,要添加静态本地图片 <img src="../../images/bg.png" alt=""> 会报错: VM14878 ...