(本文食用提醒:文章为本人自学理解笔记,若有错误、欠妥之处,感谢指正!望共进步!)
文章目录
工厂模式
来自BV1mc411h719中P4的18:17弹幕理解:
”工厂方法模式(小米只买手机)、抽象工厂方法(小米卖手机、路由器、电脑等)“
1.简单工厂
1.1 一句话理解
在一个固定的工厂里创建产品,可以在里面增加或减少生产的产品部件(例如在车工厂里生产五菱、特斯拉,这些车都可以有相同的部件或功能)。
1.2 代码目录
1.3 具体代码
car接口
package factory.simple;
public interface car {
void name();
}
CarFactory类
package factory.simple;
//简单工厂模式又名静态工场模式
public class CarFactory {
//方法一:如需增加新车型需要修改代码,违反了开闭原则
public static car getCar(String car){
if(car.equals("五菱")){
return new WuLing();
}else if(car.equals("特斯拉")){
return new Tesla();
}else{
return null;
}
}
//方法二:缺点——>冗余,增加新车型时仍需增加代码,修改类
public static car WuLing(){
return new WuLing();
}
public static car Tesla(){
return new Tesla();
}
}
Tesla类(继承了car接口)
package factory.simple;
public class Tesla implements car{
@Override
public void name(){
System.out.println("特斯拉");
}
}
WuLing类(继承了car接口)
package factory.simple;
public class WuLing implements car{
@Override
public void name(){
System.out.println("五菱宏光");
}
}
Consumer类(运行这个类看结果)
package factory.simple;
public class Consumer {
public static void main(String[] args){
//1.接口,所有的实现类!工厂
//car car=new WuLing();
//car car1=new Tesla();
//2.使用工厂创建
car car=CarFactory.getCar("五菱");
car car1=CarFactory.getCar("特斯拉");
car.name();
car1.name();
}
}
2.工厂方法
2.1 一句话理解
一个工厂里生产多种不同品牌但有相同结构的产品(如摩拜、特斯拉、五菱……),相比于简单工厂模式,更符合开闭原则。
2.2 代码目录
2.3 具体代码
car接口(同上)
package factory.method;
public interface car {
void name();
}
CarFactory接口(将类改成了接口)
package factory.method;
//工厂方法模式,满足开闭原则
public interface CarFactory {
car getCar();
}
Consumer类(新增mobile车型)
package factory.method;
public class Consumer {
public static void main(String[] args){
car car=new WuLingFactory().getCar();
car car1=new TeslaFactory().getCar();
car car2=new MobileFactory().getCar();
car.name();
car1.name();
car2.name();
}
}
Mobile类(新增)
package factory.method;
public class Mobile implements car{
@Override
public void name(){
System.out.println("摩拜单车");
}
}
MobileFactory类(新增)
package factory.method;
public class MobileFactory implements CarFactory{
@Override
public car getCar(){
return new Mobile();
}
}
Tesla类(同上)
package factory.method;
public class Tesla implements car {
@Override
public void name(){
System.out.println("特斯拉");
}
}
TeslaFactory类(新增)
package factory.method;
public class TeslaFactory implements CarFactory {
@Override
public car getCar(){
return new Tesla();
}
}
WuLing类(同上)
package factory.method;
public class WuLing implements car {
@Override
public void name(){
System.out.println("五菱宏光");
}
}
WuLingFactory类(新增)
package factory.method;
public class WuLingFactory implements CarFactory {
@Override
public car getCar(){
return new WuLing();
}
}
3.抽象工厂
3.1一句话理解
一个工厂里生产 多种不同品牌但有相同结构的 产品工厂(如小米工厂、华为工厂……)
实例理解如下:
抽象工厂代码结构总括:
来自狂神的整个代码框架理解:
3.2 代码目录
3.3 具体代码
Client类(只需修改工厂名就能实现另一种生产产品的工厂)
package factory.abstract1;
public class Client {
public static void main(String[] args){
System.out.println("=================小米系列产品==============");
//小米工厂
XiaomiFactory xiaomiFactory=new XiaomiFactory();
//小米手机
IPhoneProduct iPhoneProduct= xiaomiFactory.iphoneProduct();
iPhoneProduct.callup();
iPhoneProduct.sendSMS();
//小米路由器
IRouterProduct iRouterProduct=xiaomiFactory.irouuterProduct();
iRouterProduct.openwifi();
iRouterProduct.setting();
System.out.println("=================华为系列产品==============");
//华为工厂
HuaweiFactory huaweiFactory=new HuaweiFactory();
//华为手机
iPhoneProduct= huaweiFactory.iphoneProduct();
iPhoneProduct.callup();
iPhoneProduct.sendSMS();
//华为路由器
iRouterProduct=huaweiFactory.irouuterProduct();
iRouterProduct.openwifi();
iRouterProduct.setting();
}
}
IProductFactory接口
package factory.abstract1;
//抽象产品工厂
public interface IProductFactory {
//生产手机
IPhoneProduct iphoneProduct();
//生产路由器
IRouterProduct irouuterProduct();
}
IPhoneProduct接口
package factory.abstract1;
//手机产品接口
public interface IPhoneProduct{
void start();
void shutdown();
void callup();
void sendSMS();
}
IRouterProduct接口
package factory.abstract1;
//路由器产品接口
public interface IRouterProduct {
void start();
void shutdown();
void openwifi();
void setting();
}
XiaomiFactory类(继承重写IProductFactory接口中的方法)
package factory.abstract1;
public class XiaomiFactory implements IProductFactory{
@Override
public IPhoneProduct iphoneProduct() {
return new XiaomiPhone();
}
@Override
public IRouterProduct irouuterProduct() {
return new XiaomiRouter();
}
}
XiaomiPhone类(继承重写IPhoneProduct接口中的方法)
package factory.abstract1;
public class XiaomiPhone implements IPhoneProduct{
@Override
public void start() {
System.out.println("开启小米手机。");
}
@Override
public void shutdown() {
System.out.println("关闭小米手机。");
}
@Override
public void callup() {
System.out.println("小米打电话。");
}
@Override
public void sendSMS() {
System.out.println("小米发邮件。");
}
}
XiaomiRouter类(继承重写IRouterProduct接口中的方法)
package factory.abstract1;
public class XiaomiRouter implements IRouterProduct{
@Override
public void start() {
System.out.println("开启小米路由器。");
}
@Override
public void shutdown() {
System.out.println("关闭小米路由器。");
}
@Override
public void openwifi() {
System.out.println("小米wifi启动。");
}
@Override
public void setting() {
System.out.println("小米设置。");
}
}
HuaweiFactory类(继承重写同XiaomiFactory类)
package factory.abstract1;
public class HuaweiFactory implements IProductFactory{
@Override
public IPhoneProduct iphoneProduct() {
return new HuaweiPhone();
}
@Override
public IRouterProduct irouuterProduct() {
return new HuaweiRouter();
}
}
HuaweiPhoe类(继承重写同XiaomiPhone类)
package factory.abstract1;
public class HuaweiPhone implements IPhoneProduct{
@Override
public void start() {
System.out.println("打开华为手机。");
}
@Override
public void shutdown() {
System.out.println("关闭华为手机。");
}
@Override
public void callup() {
System.out.println("华为打电话。");
}
@Override
public void sendSMS() {
System.out.println("华为发邮件");
}
}
HuaweiRouter(继承重写同XiaomiRouter类)
package factory.abstract1;
public class HuaweiRouter implements IRouterProduct{
@Override
public void start() {
System.out.println("打开华为路由器。");
}
@Override
public void shutdown() {
System.out.println("关闭华为路由器。");
}
@Override
public void openwifi() {
System.out.println("华为wifi启动。");
}
@Override
public void setting() {
System.out.println("华为设置。");
}
}
系列文章目录
一、单例模式
二、工厂模式
三、建造者模式
四、原型模式
五、适配器模式
六、代理模式
七、装饰器模式
八、迭代器模式
九、模板方法模式
十、策略模式
十一、责任链模式
十二、观察者模式
总结、12种常用设计模式