什么是脚本?如何创建一段脚本
计算机如何融入它周围的世界中
如何为web页面编写一段脚本
从HTML页面链接一个JavaScript文件
<script src="js/add-content.js"></script>
js.
扩展名
元素用来在HTML页面中高速浏览器载入JavaScript文件(类似于
元素用来载入css文件)访问者模式
Element
),也就是一个抽象类要有定义访问者的操作acceptConcreteElement
),Element的子类Visitor
),一个接口ConcreteVisitor
),实现Visitor
接口的类访问者模式使用了一种被称为双重分派的技术
通过简单问题根据电表显示用电量计算用户的电费
首先设计一个抽象访问者也就是一个接口
package VisitorPatternTask;
public interface Visitor { //抽象访问者(接口)
public abstract double visit(AmmeterElement ammeterElement ); //用于访问抽象类数据的方法
}
其次设计一个抽象元素,也就是一个抽象类
package VisitorPatternTask;
public abstract class AmmeterElement { //创建一个电表(抽象类)
public abstract void accept(Visitor visitor); //允许接口变量访问的方法(必须要有)
public abstract void setElectricQuantity(double electricquantity); //设置电量的抽象方法
public abstract double showElectricQuantity();
}
然后添加具体访问者,也就是实现Visitor接口的类
package VisitorPatternTask;
public class FamilyMeterKeeper implements Visitor{ //创建实现访问者接口的类(家庭访问者)
@Override
public double visit(AmmeterElement ammeterElement) {
double charge = 0; //定义一个费用变量
double unitOne = 0.5,unitTwo = 1;
int basic = 5000;
double value = ammeterElement.showElectricQuantity(); //抽象类的对象的方法
if(value > basic){
charge = (value-basic)*unitTwo + basic*unitOne;
}
else{
charge = value*unitOne;
}
return charge;
}
}
package VisitorPatternTask;
public class IndustrialSurveyor implements Visitor{
@Override
public double visit(AmmeterElement ammeterElement) {
double charge = 0; //定义一个费用变量
double unitOne = 1.5,unitTwo = 2;
int basic = 10000;
double value = ammeterElement.showElectricQuantity();
if(value > basic){
charge = (value-basic)*unitTwo + basic*unitOne;
}
else{
charge = value*unitOne;
}
return charge;
}
}
最后再设计具体元素,也就是继承抽象类的子类
package VisitorPatternTask;
public class Ammeter extends AmmeterElement {
double electricQuantity; //创建电表的电量
@Override
public void accept(Visitor visitor) { //双重分派技术
double charge = visitor.visit(this); //让访问者访问当前元素,this代表当前对象的
System.out.println("当前电表用户需要缴纳的电费是:" + charge + "元");
}
@Override
public void setElectricQuantity(double electricQuantity) { //设置用电量
this.electricQuantity = electricQuantity;
}
@Override
public double showElectricQuantity() { //返回用电量
return this.electricQuantity;
}
}
创建一个主类进行测试
package VisitorPatternTask;
public class Application2 {
public static void main(String[] args) {
Visitor homeMan = new FamilyMeterKeeper(); //将家庭电表标准赋值给接口变量
Ammeter ammeter = new Ammeter();
ammeter.setElectricQuantity(6000);
ammeter.accept(homeMan);
Visitor industryMan = new IndustrialSurveyor(); //工业标准
ammeter.accept(industryMan);
}
}
代码结果
"D:\IntelliJ IDEA 2019.3.3\jbr\bin\java.exe" "-javaagent:D:\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=64701:D:\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath D:\HelloWorld\out\production\HelloJava VisitorPatternTask.Application2
当前电表用户需要缴纳的电费是:3500.0元
当前电表用户需要缴纳的电费是:9000.0元
进程已结束,退出代码 0
装饰模式
Component
):实质就是抽象类,其中定义了抽象方法.抽象组件就是"被装饰者"角色ConcreteComponent
):抽象组件的一个子类Decorate
):也是抽象组件的一个子类,可以是抽象子类也可以是非抽象子类ConcreteDecorate
):装饰的一个子类,是非抽象类实际例子
首先创建一个抽象组件,也就是抽象类
package DecoratorPatternTask;
public abstract class Bird { //创建一个抽象组件
public abstract int fly(); //抽象方法
}
然后创建一个具体组件,也就是抽象组件的子类
package DecoratorPatternTask;
public class Sparrow extends Bird{ //具体组件
public final int Distance = 100; //飞行距离
@Override
public int fly() { //重写父类抽象方法返回飞行距离
return Distance;
}
}
其次创建装饰,也就是抽象组件的子类,可以比喻成装修公司
其作用是装饰具体组件,
package DecoratorPatternTask;
public abstract class Decorator extends Bird{ //继承bird的抽象子类(也就是装饰),相当于装修公司
Bird bird; //声明一个父类元素的变量
public Decorator(){
}
public Decorator(Bird bird){ //自定义构造方法,获取bird的引用
this.bird = bird;
}
public abstract int eleFly(); //用于装饰fly()的方法,行为有具体装饰者实现
}
然后创建具体装饰,也就是装饰的子类(非抽象类),也就是创建装修公司里的员工
package DecoratorPatternTask;
public class SparrowDecorator extends Decorator{ //装饰的子类,相当于装修员工
public final int Distance = 50;
public SparrowDecorator(Bird bird){ //关键之处
super(bird); //调用父类的构造方法 父类的bird
}
@Override
public int eleFly() {
return Distance;
}
@Override
public int fly() {
int Distance = 0; //声明一个变量距离
Distance = bird.fly() + eleFly();
return Distance;
} //
}
除此之外还可以使用多个装饰者,也就是公司里的其他装修员工
package DecoratorPatternTask;
public class SparrowDecorator2 extends Decorator {
final int Distance = 1000;
public SparrowDecorator2(){
}
public SparrowDecorator2(Bird bird){ //自定义构造方法
super(bird); //调用父类构造方法
}
@Override
public int eleFly() {
return Distance;
}
@Override
public int fly() {
int Distance = 0;
Distance = bird.fly() + eleFly();
return Distance;
}
}
最后可以进行调试
package DecoratorPatternTask;
public class Application3 {
public static void main(String[] args) {
Bird bird = new Sparrow(); //将子类引用传给父类变量,即父类变量成为上转型对象
System.out.println("没有安装电子翅膀小鸟的飞行距离为:\n" + bird.fly() + "米");
bird = new SparrowDecorator(bird); //相当于没有安装电子翅膀的小鸟的引用传给装修人员
System.out.println("安装了电子翅膀小鸟的飞行距离为:\n" + bird.fly() + "米" );
bird = new SparrowDecorator(bird);
System.out.println("再安装一次电子翅膀小鸟的飞行距离为:\n" + bird.fly() + "米");
bird = new SparrowDecorator2(bird);
System.out.println("安装超级电子翅膀小鸟的飞行距离为:\n" + bird.fly() + "米");
}
}
运行的结果是
"D:\IntelliJ IDEA 2019.3.3\jbr\bin\java.exe" "-javaagent:D:\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=55757:D:\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath D:\HelloWorld\out\production\HelloJava DecoratorPatternTask.Application3
没有安装电子翅膀小鸟的飞行距离为:
100米
安装了电子翅膀小鸟的飞行距离为:
150米
再安装一次电子翅膀小鸟的飞行距离为:
200米
安装超级电子翅膀小鸟的飞行距离为:
1200米
进程已结束,退出代码 0
occur
nuisance
democracy
scenery
average
thermometer
slap
obstacle
terror
worthwhile
significance