软件案例分析课件.ppt

上传人:小飞机 文档编号:2163884 上传时间:2023-01-22 格式:PPT 页数:50 大小:450KB
返回 下载 相关 举报
软件案例分析课件.ppt_第1页
第1页 / 共50页
软件案例分析课件.ppt_第2页
第2页 / 共50页
软件案例分析课件.ppt_第3页
第3页 / 共50页
软件案例分析课件.ppt_第4页
第4页 / 共50页
软件案例分析课件.ppt_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《软件案例分析课件.ppt》由会员分享,可在线阅读,更多相关《软件案例分析课件.ppt(50页珍藏版)》请在三一办公上搜索。

1、创建模式,创建模式综述,简单工厂(Simple Factory)工厂方法(Factory Method)抽象工厂模式(Abstract Factory)建造模式(Builder)原型模式(Prototype),1 简单工厂(Simple Factory),又称为静态工厂方法(Static Factory Method);由一个工厂对象决定创建出哪一种产品类的实例;所有产品实现同一个接口。,1.2 简单工厂方法类图,1.3 示例,1.4 简单工厂方法代码,public class ImgProcessorFactory public static ImgProcessor createImgPr

2、ocessor(String format)if(format.equals(“jpg”)return new MyProcessor();else if(format.equals(“bmp”)return new BmpProcessor.,public Interface ImgProcessor public byte resizeImg(byte data);public class JpgProcessor implements ImgProcessor public byte resizeImg(byte data).,1.5 简单工厂方法代码续,1.6简单工厂方法的简化实现,1

3、.7示例,1.8 简单工厂简化实现的另一个例子,1.9简单工厂方法优点,类工厂集中了所有的创建逻辑;可以在不修改客户端的情况下加入新类。,1.10简单工厂方法缺点,创建逻辑比较复杂;使用静态方法作为构建方法,无法继承;引入新产品的时候必须修改工厂类。,1.11简单工厂方法的作用,是所有构建模式的基础;将构建部分代码适当修改后,可将对象循环使用。,2 工厂方法,工厂类有若干个,实现了同样一个工厂接口。每个工厂类可以创建一类具体的产品。,2 工厂方法,2.1 工厂方法的一个例子,2.2 工厂方法部分代码,public class BmpFactory public BmpFactory()publ

4、ic ImageProcessor createProcessor()return new BmpProcessor();,2.3 工厂方法在java中的一个例子,public interface Collection.Iterator iterator();public abstract class AbstractList extends AbstractCollection implements List.Iterator iterator()/代码实现部分,3 抽象工厂模式(Abstract Factory),3.2 抽象工厂方法的一个例子,3.3 抽象工厂方法特点,可以一次增加一个产

5、品族增加一个产品族必须增加一产品类,4 单例模式,每个类只有一个实例。类的构造函数是私有的。类使用一个静态属性保存自己的实例。,public class SingleInstance private static SingleInstance singleInstance;private SingleInstance()public synchronized static SingleInstance getInstance()if(bmpProcessor=null)singleInstance=new SingleInstance();return singleInstance;,4.2

6、单例模式的一种实现方法,public class SingleInstance private static SingleInstance singleInstance;private SingleInstance()static singleInstance=new SingleInstance();,4.3 单例模式的另外一种实现方法,4.4 抽象工厂方法第三种实现public class SingleInstance private static Map allInstance=newHashMap();private SingleInstance()public static sync

7、hronzied MyInterface getInstance(String name)Object obj=allInstance.get(name);if(obj=null)obj=Class.forName(name).newInstance();allInstance.put(name,obj);return(MyInterface)obj;,4.5 什么情况下使用单例模式,系统只需要一个实例;对于工具类,最好使用单例模式,而不是静态方法;对于数据库连接,更不能使用单例模式。,4.6 单例的状态,有状态类,用来记录系统当前状态。无状态类,一个设置为不变类(Immutable).例如工

8、具类。,4.7 单例模式的例子,java的RunTime对象RunTime.getRuntime();,4.8 多例模式,在多例模式中每个类有若干个实例。多例类必须自己创建、管理自己的实例,并向外界提供自己的实例。类使用几个或者是一个collection属性保存实例。,public class Die private static Die dice=new Die6;static for(int i=1;i=6;i+)dicei=new Die(i);private int value;private Die(int value)this.value=value;,4.9 多例模式示例,4.1

9、0 多例模式示例续,public int getValue()return value;public Die getDie(int value)if(value6)throw new llegalArgumentException(invalid value:+value);return dicevalue;,4.11多例模式示例public class Resource private static Map resources=new HashMap();private Resouce(Locale locale).public Resource getResouce(Locale loca

10、le)Object obj=resources.get(locale);if(obj=null)obj=new Resouce(locale);resources.put(locale,obj);return(Resource)obj;,4.12 序列问题的单例解决方案,public class MySeq private mySeq;private MySeq()public synchronzied static MySeq getMySeq()if(mySeq=null)mySeq=new MySeq;,4.13 序列问题的单例解决方案,private Map map=new HashM

11、ap();public synchronzied int getNextVal(String seq)if(map.get(seq)!=null)else 从数据库中读入到map中 int newValue=map.get(seq).intValue()+1;将newValue存入数据库。map.put(seq,new Integer(newValue);return newValue;,4.14 序列问题多例解决方案,public class MySeq private static Map map=new HashMap();private String seqName;private M

12、ySeq(String seqName)this.seqName=seqName;public synchronzied static getMySeq(String seq)map中存在则返回,否则构建.,4.15 序列问题多例解决方案续,int curValue=-1;public synchronzied int getNextVal()if(curValue=-1)从数据库中读入到curValue中curValue+;将curValue存入数据库;return curValue;,5 建造模式(Builder),5.2 建造模式的一个例子,5.3 构建模式的另一个例子,5.4 构建模式

13、同抽象工厂模式的区别,6 原型模式,通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个对象类型的方法来创造出更多的同类对象。java中Object.clone(),6.1 原型模式1 简单形式的原型,实现Object.clone()方法,6.2 原型模式2-登记形式的原型模式,在一个类中登记要复制的原型类型,6.3 关于深复制和浅复制,6.4浅复制,被复制对象都含有原来对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。,6.5 浅复制的一个例子,public Myclass private MyAtt att;private int width;.public Mycla

14、ss lowClone()MyClass myClass=new MyClass;myClass.setWidth(this.width);myClass.setMyAtt(this.att);return myClass;,6.6 深复制,被复制对象所有变量都含有同原来对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量都指向被复制过的新对象。,6.7深复制的一个例子,public Myclass private MyAtt att;private int width;.public deepClone()MyClass myClass=new MyClass;myClass.s

15、etWidth(this.width);myClass.setMyAtt(this.att.deepClone();,6.8 深复制的另外实现方法,public MyClass deepClone().ObjectOutputStream out=new ObjectOutputStream(.);out.writeObject(this);ObjectInputStream in=new ObjectInputStream(.);Myclass temp=(MyClass)in.readObject();return temp;,6.9 使用ObjectInput(output)Stream注意事项,JDK版本必须严格一致注意transient 关键字,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号