背景
本人从事开发工作也有多年,目前坐标湖南长沙,以前在各种平台也发过一些文章但是都没有坚持下来;
这个系列是要写设计模式的,将23大设计模式逐一用自己的理解加例子写出来。
其一、眨眼就到了而立之年,觉得自己记忆力也是下降久做过的东西总是记不起,果然是好记性不如烂笔头。
其二、这么多年白嫖了网上很多的文章,视频,一直觉得应该分享一些东西但总是沉不下心去做。
其三、可能写的不好至少也留下一些东西,也是希望能帮助到一些朋友。
说明
在我的理解里:每一种设计模式仅仅是一种思想,并不是说每个设计模式之间就会有很明确的边界。有时候你会觉得某两种设计模式实现起来特别像,其实是因为有些的设计模式延伸出来的仅仅是着重的看待点不一样而已;学习设计模式一定不是只学习固定的实现方式。要了解设计思想,然后在项目中灵活得进行最适合设计。
简单工厂模式
简单工厂: 即“给一个对象要求,生产一个相应对象”
直接上一段实现代码
public class SimpleFactory {
public static final class Const {
public static final int ANIMAL_A = 0;
public static final int ANIMAL_B = 1;
}
public interface Animal {
String name();
}
static class Fish implements Animal {
@Override
public String name() {
return "鱼";
}
}
static class Insect implements Animal {
@Override
public String name() {
return "虫子";
}
}
public static Animal grabAnimal(int type) {
switch (type) {
case Const.ANIMAL_A:
return new Insect();
case Const.ANIMAL_B:
return new Fish();
}
return null;
}
}
调用示例
//简单工厂模式
Log.d(SimpleFactory.grabAnimal(SimpleFactory.Const.ANIMAL_A).name());
Log.d(SimpleFactory.grabAnimal(SimpleFactory.Const.ANIMAL_B).name());
实际上简单工厂模式由于每次增加一个类型的动物对象就要修改工厂类,违背了“开闭原则“。我们在生成很明确固定的对象且不容易发生扩展的时候可以选用简单工厂模式。
简单工厂代码链接
抽象工厂方法
抽象工厂方法:“工厂也是一个接口,具体工厂生产由你建立的这个工厂决定”
代码实现如下
public class FactoryMethod {
//工厂接口
public interface IDeviceFactory {
IDevice getDevice();
}
public interface IDevice {
String shockAction();
}
//具体设备
public static class D200 implements IDevice {
@Override
public String shockAction() {
return "Intent.SHOCK.D200";
}
}
//具体设备
public static class D200_1 implements IDevice {
@Override
public String shockAction() {
return "Intent.SHOCK.D200_2";
}
}
//第一个工厂
public static class DeviceFactory implements IDeviceFactory {
@Override
public IDevice getDevice() {
return new D200();
}
}
//第二个工厂
public static class DeviceFactory_1 implements IDeviceFactory {
@Override
public IDevice getDevice() {
return new D200_1();
}
}
}
抽象工厂方法核心思想就是工厂是接口类!具体实现生产交给子类去完成!!
抽象工厂方法链接
抽象工厂
抽象工厂:“工厂是用来生产一系列的产品的接口实现,具体工厂生产由你建立的这个工厂实现决定”
跟抽象工厂方法的区别:
抽象工厂方法:生产一个类型的产品
抽象工厂:生产一系列的产品
代码实现如下
public class AbstractFactory {
public interface IFactory {
IMouse getMouse();
IKeyBroad getKeyBroad();
}
public interface IMouse {
String mouseBrandName();
}
public interface IKeyBroad {
String keyBroadBrandName();
}
public static class HPMouse implements IMouse {
@Override
public String mouseBrandName() {
return "惠普的鼠标";
}
}
public static class HPKeyBroad implements IKeyBroad {
@Override
public String keyBroadBrandName() {
return "惠普的键盘";
}
}
public static class LXMouse implements IMouse {
@Override
public String mouseBrandName() {
return "联想的鼠标";
}
}
public static class LXKeyBroad implements IKeyBroad {
@Override
public String keyBroadBrandName() {
return "联想的键盘";
}
}
public static class XMFactory implements IFactory {
@Override
public IMouse getMouse() {
return new HPMouse();
}
@Override
public IKeyBroad getKeyBroad() {
return new LXKeyBroad();
}
}
public static class HWFactory implements IFactory {
@Override
public IMouse getMouse() {
return new LXMouse();
}
@Override
public IKeyBroad getKeyBroad() {
return new LXKeyBroad();
}
}
}
抽象工厂链接
吐槽
没啥好吐槽的了…