面向接口编程(简单工厂模式)和单列设计模式
2015-07-05 20:03
344 查看
1.简单工厂模式。假如让computer类组合一个printer对象,如果有一天系统需要重构,需要使用Butterpriner来代替printer,这就需要打开computer类源代码进行修改。这样导致很不方便。为了避免这个问题,工厂模式建议让computer类组合一个output类型对象,将computer类与printer类完全分离。
代码举例:public class Computer{
private Output out;
public Computer(Output out){
this.out=out;
}
//定义一个模拟获取字符串输入的方法
public void keyIn(String msg){
out.getData(msg);
}
public void print(){
out.out;
}
}
public class OutputFactory{
public Output getOutput(){
return new Printer();
}
public static void main(String[] args){
OutputFactory of=new OutputFactory();
Computer c= new Computer(of.getOutput());
}
}
public class BetterPrinter implements Output{
}
总结:上面的BetterPrinter类实现了Output接口,因此也可当成output对象使用,于是只要把outputFactory工厂类的getoutput()方法中代码改为:return new BetterPrinter();
2.单列设计模式
单列设计模式:解决一个类内存只存在一个对象,想要保住唯一的对象。也加饿汉模式。
对象是方法被调用时,才初始化,也叫做延时加载。signle类进内存,对象还没有存在,只有调用getInstance方法时才建立对象。记住原则,定义单列建议使用饿汉式。
代码举例:
class single
{
private single s=null;
private single(){}
public static single getInstance()
{if(s==null)
{
synchronized(single.class)
{if(s==null)
s=new.single();
}
}
}
}
或public static synchronized single getInstance(){}
代码举例:public class Computer{
private Output out;
public Computer(Output out){
this.out=out;
}
//定义一个模拟获取字符串输入的方法
public void keyIn(String msg){
out.getData(msg);
}
public void print(){
out.out;
}
}
public class OutputFactory{
public Output getOutput(){
return new Printer();
}
public static void main(String[] args){
OutputFactory of=new OutputFactory();
Computer c= new Computer(of.getOutput());
}
}
public class BetterPrinter implements Output{
}
总结:上面的BetterPrinter类实现了Output接口,因此也可当成output对象使用,于是只要把outputFactory工厂类的getoutput()方法中代码改为:return new BetterPrinter();
2.单列设计模式
单列设计模式:解决一个类内存只存在一个对象,想要保住唯一的对象。也加饿汉模式。
对象是方法被调用时,才初始化,也叫做延时加载。signle类进内存,对象还没有存在,只有调用getInstance方法时才建立对象。记住原则,定义单列建议使用饿汉式。
代码举例:
class single
{
private single s=null;
private single(){}
public static single getInstance()
{if(s==null)
{
synchronized(single.class)
{if(s==null)
s=new.single();
}
}
}
}
或public static synchronized single getInstance(){}
相关文章推荐
- C# 使用TraceSource记录程序日志(转载)
- 使用 Google V8 引擎开发可定制的应用程序
- 修改Java程序的进程名
- Python写的分析MySQL binlog日志工具
- C中嵌入python
- Matlab矩阵幂运算
- java异常常见问题汇总
- Map代码案例
- springmvc+hibernate中几个常用的注解
- C++ 随笔 知识点 Sendmessage,FindWindow,keybd_event
- java设计模式——观察者模式
- PHP5 session 详解【经典】
- 使用vbs脚本uft8toansi进行文件编码转换
- 2015070506 - EffactiveJava笔记 - 第65条 不要忽略异常
- C语言-输出彩色字体
- Java 常用排序算法实现
- PHP 错误处理机制
- MAC下GItHub客户端的使用
- Python糗百爬虫(精简版)
- Matlab应用实例(3)—fminsearch