单例模式 简单工厂模式
2015-07-10 20:55
253 查看
设计模式:解决固定问题的固定办法
单例设计模式:对外只能得到一个对象的模式
单例设计模式的实现有两种:
1:懒汉式
1,声明一个私有的静态的本类类型的对象;
2,将构造函数私有化
3,提供一个静态的公有的本类类型方法返回本类类型的对象,对1中的对象进行判断,判断值是否为空,若为空则通过new class 创建,否直接返回声明的对象;
2,:饿汉式
1,声明一个私有的静态的,最终的本类类型的对象,并实例化
2,构造函数私有化
3,提供一个共有的静态的本类类型的方法返回本类类型的对象
工厂设计模式:
提供批量的实例化对象的功能,且工厂中的方法都是公共的静态的返回接口类型的方法
单例设计模式:对外只能得到一个对象的模式
单例设计模式的实现有两种:
1:懒汉式
class Person{ private static Person instance; private Person(){ System.out.println("===private Person()===="); } public static Person getInstance(){ if(instance==null){ instance=new Person(); } return instance; } }
1,声明一个私有的静态的本类类型的对象;
2,将构造函数私有化
3,提供一个静态的公有的本类类型方法返回本类类型的对象,对1中的对象进行判断,判断值是否为空,若为空则通过new class 创建,否直接返回声明的对象;
2,:饿汉式
class Person{ private static final Person instance=new Person(); private Person(){ System.out.println("===private Person()===="); } public static Person getInstance(){ return instance; }
1,声明一个私有的静态的,最终的本类类型的对象,并实例化
2,构造函数私有化
3,提供一个共有的静态的本类类型的方法返回本类类型的对象
工厂设计模式:
提供批量的实例化对象的功能,且工厂中的方法都是公共的静态的返回接口类型的方法
interface Animal{ void eat(); void sleep(); void move(); } class Dog implements Animal{ public void eat(){ System.out.println("狗吃"); } public void sleep(){ System.out.println("狗睡"); } public void move(){ System.out.println("狗动"); } public void lookHouse(){ System.out.println("狗看门"); } } class Wolf implements Animal{ public void eat(){ System.out.println("狼吃"); } public void sleep(){ System.out.println("狼睡"); } public void move(){ System.out.println("狼动"); } public void shout(){ System.out.println("狼嗷嗷叫"); } } /** * 工厂类的主要职责:生产对象 */ class SimpleFactory{ /** * 工厂中的方法都是公共的静态的返回接口类型的方法 */ public static Animal getInstance(String type){ if("dog".equals(type)){ return new Dog(); }else if("wolf".equals(type)){ return new Wolf(); }else { System.out.println("无效的类型"); return null; } } static void print(Animal al){ if(al!=null){ al.eat(); al.sleep(); al.move(); if(al instanceof Dog){ Dog dog=(Dog)al; dog.lookHouse(); }else if(al instanceof Wolf){ //判断是否是由子类上转型转换过来的 Wolf wolf=(Wolf)al; //下转型转换为子类对象,调用子类新的方法 wolf.shout(); } } } static void exe(){ Animal dog=SimpleFactory.getInstance("dog"); Animal wolf=SimpleFactory.getInstance("wolf"); Animal al=SimpleFactory.getInstance("fox"); SimpleFactory.print(dog); SimpleFactory.print(wolf); SimpleFactory.print(al); } } public class TestSimpleFactoryDemo08{ public static void main(String[] args){ /*Animal dog=new Dog(); dog.eat(); dog.sleep(); dog.move(); Animal wolf=new Wolf(); wolf.eat(); wolf.sleep(); wolf.move();*/ /* Animal dog=new Dog(); Animal wolf=new Wolf(); print(dog); print(wolf); */ SimpleFactory.exe(); //全部 } }
相关文章推荐
- 安装和配置网络存储服务器tgtadm
- UILabel自适应高度
- Unity学习笔记 之 触发Unity UI 的 Button 事件 的代码记录
- Web
- java线程的疑问???
- runLoop和runtime的分析
- ACM-数据结构-并查集
- libvirt框架分析
- Storm自定义调度器实现--DirectScheduler
- [cocos2dx]Mac操作系统下的cocos2dx-lua环境配置
- 城市平乱(最短路径)
- MVC过滤器详解 面向切面编程(AOP)
- HDOJ 1000 A + B Problem
- python3.4学习笔记(二十一) python实现指定字符串补全空格、前面填充0的方法
- Java获取图片属性
- canvas画布基础
- poj 1416 Shredding Company (DFS)
- update-alternatives命令详解
- 大数阶乘
- 汉诺塔