工厂方法模式
多了工厂类的概念
要想创建产品,需要先创建该产品的工厂的实例,通过工厂来创建产品
抽象工厂模式
抽象工厂中,一个工厂可以创建多种产品,例如 我们创建一个 Java,他是跨平台的,我们需要创建他的图标需要创建他的按钮等等等等....,我们就要创建抽象工厂方法,方法中声明了 Java 中的一切所需要实现的方法,当我们在 苹果电脑上是,我们创建苹果电脑的java工厂,继承我们的抽象工厂类,并实现其中所有的虚函数,在windwos电脑上时也同样这么操作
简单工厂
class Plant {
constructor(name) {
this.name = name;
}
grow() {
console.log("正在生长~~~");
}
}
class Apple extends Plant {
constructor(name, flavour) {
super(name);
this.flavour = flavour;
}
}
class Orange extends Plant {
constructor(name, flavour) {
super(name);
this.flavour = flavour;
}
}
class Factory {
static create(type) {
switch (type) {
case "apple":
return new Apple("苹果", "甜甜的");
case "orange":
return new Orange("橘子", "酸酸的");
default:
throw new Error("你要的东西不存在");
}
}
}
let apple = Factory.create("apple");
console.log(apple.flavour);
let orange = Factory.create("orange");
console.log(orange.flavour);
class JQuery {
constructor(selector) {
this.selector = selector;
this.element = document.querySelectorAll(this.selector);
this.length = this.element.length;
for (let i = 0; i < this.length; i++) {
this[i] = this.element[i];
}
}
html(content) {
if (!content) {
return this[0].innerHTML;
}
this[0].html = content;
}
css(styleObj) {
if (!styleObj) {
return;
}
let style = "";
for (let key in styleObj) {
style += `${key}: ${styleObj[key]};`;
}
let ele = document.createElement("style");
let head = document.querySelector("head");
ele.innerText = `{${style}}`;
head.appendChild(ele);
}
}
let $ = function (selector) {
return new JQuery(selector);
};
console.log($("li")[0]);
$("li").css({
color: "red",
});
工厂方法
class Plant {
constructor(name) {
this.name = name;
}
grow() {
console.log("正在生长");
}
}
class Apple extends Plant {
constructor(name, flaver) {
super(name);
this.flaver = flaver;
}
}
class Factory {
create(){}
}
class AppleFactory extends Factory {
static create() {
return new Apple("苹果", "甜甜的");
}
}
let apple = AppleFactory.create()
console.log(apple)
抽象工厂方法
class Factory {
createIcon() {}
createButton() {}
}
class Icon {}
class AppIcon {
render() {
console.log("绘制苹果图标");
}
}
class WinIcon {
render() {
console.log("绘制windows的图标");
}
}
class Button {}
class AppleButton {
render() {
console.log("绘制苹果按钮");
}
}
class WinButton {
render() {
console.log("绘制windows按钮");
}
}
class AppleFactory extends Factory {
createButton() {
return new AppleButton();
}
createIcon() {
return new AppIcon();
}
}
class WinFactory extends Factory {
createButton() {
return new WinButton();
}
createIcon() {
return new WinIcon();
}
}
let windowsFactory = new WinFactory();
windowsFactory.createButton().render();
windowsFactory.createIcon().render();
let appleFactory = new AppleFactory();
appleFactory.createButton().render();
appleFactory.createIcon().render();