背景
经常听到很多人说设计模式。 也觉得设计模式很是重要,但是迟迟没有对自己的所知所学做些总结。
这里将对几种设计模式做一次总结。
模式统一先从哪里用到开始讲,然后再讲设计模式是如何使用的。
不然诸位看官知道了设计模式后还会依然很茫然。
工厂模式
工厂模式作用
工厂模式是用来创建其他对象的对象。
比如我们熟悉的类Calendar
java.util.Calendar - getInstance()
java.util.Calendar - getInstance(TimeZone zone)
java.util.Calendar - getInstance(Locale aLocale)
java.util.Calendar - getInstance(TimeZone zone, Locale aLocale)
java.text.NumberFormat - getInstance()
java.text.NumberFormat - getInstance(Locale inLocale)
还有创建Bitmap的BitmapFactory,下面所有的方法都是返回Bitmap,只是因为参数的不同所以创建的方法不同而已。也是一中工厂模式。
方法名(只列出部分方法) | 参数及解释 |
---|---|
decodeByteArray(byte[] data, int offset, int length) | 从指定字节数组的offset位置开始,将长度为length的数据 |
decodeFile(String pathName) | 从pathName对应的文件解析成的位图对象 |
decodeFileDescriptor(FileDescriptor fd) | 从FileDescriptor中解析成的位图对象 |
decodeResource(Resource res,int id) | 根据给定的资源Id解析成位图 |
decodeStream(InputStream in) | 把输入流解析成位图 |
什么是工厂模式
wiki的解释是:
工厂对象通常包含一个或多个方法,用来创建这个工厂所能创建的各种类型的对象。这些方法可能接收参数,用来指定对象创建的方式,最后返回创建的对象。
有时,特定类型对象的控制过程比简单地创建一个对象更复杂。在这种情况下,工厂对象就派上用场了。工厂对象可能会动态地创建产品对象的类,或者从对象池中返回一个对象,或者对所创建的对象进行复杂的配置,或者应用其他的操作。
这些类型的对象很有用。几个不同的设计模式都应用了工厂的概念,并可以使用在很多语言中。例如,在《设计模式》一书中,像工厂方法模式、抽象工厂模式、生成器模式,甚至是单例模式都应用了工厂的概念。
简单来说,工厂模式就是用来创建其他对象的对象。
普通工厂
例如有一个Phone类来表示手机,手机又区分成smartPhone 和 FuncPhone 。 那么这几个类用于工厂类可以如下表示:
class Phone{/*.......*/}
class SmartPhone extends Phone{/*.......*/}
class FuncPhone extends Phone{/*.......*/}
//它们的工厂类
interface PhoneFactory{
abstract Phone createPhone();
}
class SmartPhoneFactory implements ButtonFactory{
Phone createButton(){
return new SmartPhone();
}
}
class FuncPhoneFactory implements PhoneFactory{
Phone createButton(){
return new FuncPhone();
}
}
但是上面的代码比较复杂。 每种工厂类都要弄一个类。 我们应该把创建的类都放在一个地方
// 多个工厂方法
public class HumanFactory{
public static Male createMale() {
return new Male();
}
public static Female createFemale() {
return new Female();
}
}
// 工厂测试类
public class FactoryTest {
public static void main(String[] args){
Human male = HumanFactory.createMale();
male.eat();
male.sleep();
male.beat();
}
}
网友评论